package pers.cz.session;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: PostGirl-panent
 * @description: AbstractContext
 * @author: Cheng Zhi
 * @create: 2022-04-26 21:41
 **/
public abstract class AbstractContext {

    /**
     * 在当前的上下文中存入一个属性，如果属性已经存在将被覆盖
     *
     * @param key
     *            the key of the value.
     * @param value
     *            the value to be stored.
     */
    public void put(String key, Object value) {
        getContextMap().put(key, value);

    }

    /**
     * fetch a object in session
     * @param key
     */
    @SuppressWarnings("unchecked")
    public <X> X get(String key) {
        return (X)getContextMap().get(key);
    }

    /**
     * 从当前上下文中删除属性。返回属性的值。
     * 如果要删除的属性不存在，将返回null
     * @param key
     * @return
     */
    public Object remove(String key){
        return getContextMap().remove(key);
    }

    /**
     * 得到全部属性
     * @return 一个安全拷贝,修改无效
     */
    public Map<String,Object> getAllAttributes(){
        Map<String,Object> data=new HashMap<String,Object>();
        data.putAll(getContextMap());
        return data;
    }

    /**
     * 判断上下文中有没有指定的key
     * @param key
     * @return
     */
    public boolean containsKey(String key){
        return getContextMap().containsKey(key);
    }

    public void clear(){
        getContextMap().clear();
    }

    protected abstract Map<String,Object> getContextMap();
}
